class Parking
  attr_accessor :places,:nbDispo,:titre,:nbniveau
  attr_reader :acces,:nbPlace,:panneaux,:db,:nbniveau
  require './Modele/Acces'
  require './Modele/Place'
  require './Modele/Panneau'
  require 'Modele/Client_garanti'
  require "sqlite3" 
  
  def initialize(titre,nb,nb_niveau=1,load=false)
   @nbniveau=nb_niveau   
   @titre=titre
   @db = SQLite3::Database.new("#{titre}.db")
   @nbPlace = nb    
   @nbDispo = nb - @db.execute("select count(*) from Places")[0][0]
   @panneaux = Array.new(2) {|e| e=Panneau.new(self)}
   @acces = Array.new(2) {|e| e=Acces.new(self)}
   @places = Array.new(nb) {|e| e=Place.new(e,db,set_niveau(e+1))}
   unless load
     self.enregistrer_parking
   end
   #afficher_panneau
  end 
  
  def enregistrer_parking
   @db.execute("insert into Parkings (titre,nbPlaces,nbNiveau) 
                               values ('#{@titre}',#{@nbPlace},#{@nbniveau})")
  end
  
  def get_last_id
    if @db.execute("select * from Places where immatriculation=''")[0]
      
    end
    return 0
  end
  
  
  def place_libres(client)
   if client.class == Client_garanti
     @places.push(Place.new(@places.size,@db,set_niveau(@places.size)))
   end
   tabPlace=[]
   @places.each(){|pl| tabPlace.push(pl) if pl.is_empty }
   return tabPlace
 end
 
 def get_place_by_vehicule(immat)
   for place in @places
     if place.vehicule
        return place if place.vehicule.immat == immat
     end
   end
   return nil
 end
 
 def get_place_by_ticket(ticket)
   for place in @places
      return place if place.ticket == ticket
   end
   return nil
 end
 
 def set_niveau(id)  
   niveau = 0
   nbplaceniveau= (nbPlace.to_f / nbniveau).ceil
   nbplaceniveau = 1 if nbplaceniveau == 0
   while id > nbplaceniveau     
     niveau+=1
     id -= nbplaceniveau
   end
   return niveau
  end  
  
  def est_plein
   nbDispo == 0
  end
  
  def existe_vehicule?(vehi)
    if @db.execute("select immatriculation from Vehicules where immatriculation = '#{vehi.immat}'")[0] != nil
       return true
    end
      return false
  end
  
  def maj_panneau
    @panneaux.each do 
      |panneau| panneau.maj(self)
    end
  end
  
def afficher_panneau
    maj_panneau
    @panneaux.each do 
      |panneau| panneau.afficher_panneau
    end
  end
  
  
   
 
end